'''
socket
    bind((ip,port))         绑定ip和端口 元组
    listen(N)               开启TCP监听，N表示操作系统挂起的最大连接数量(最大排队等待数量)，1-5之间 一般5
    accept()                被动接收tcp客户端连接，阻塞式
    connect((ip,port))      主动初始化tcp服务器连接 元组
    
    recv(size)              接收tcp数据，返回值为字符串类型，size表示要接收的最大数量
    send(str)               发送tcp数据，返回值是要发送的字节数量
    sendall(str)            完整发送tcp数据，str中的数据发送到连接的socket，返回之前尝试发送所有数据，若成功则为None，失败抛出异常
    
    recvform()              接收udp数据，返回值为一个元组（data,address)，data：接收的数据 address 发送数据的socket地址
    sendto(data,(ip,port))  发送udp数据，返回值是发送的字节数
    
    close()                 关闭socket
'''

'''
tcp服务端流程：
    1. 创建socket对象
    2. bind绑定端口
    3. listen开启监听
    4. accpet()等待客户端连接
    5. recv()/send() 接收和发送数据
    6. close()关闭连接
'''
from socket import socket,AF_INET,SOCK_STREAM

server_socket = socket(AF_INET,SOCK_STREAM)
ip = '127.0.0.1'
port = 80
server_socket.bind((ip,port))
server_socket.listen(5)
print(f"服务已启动，地址{ip}，端口{port}")
client_socket,client_addr = server_socket.accept() # 解包赋值，返回值是元组
data = client_socket.recv(1024)
print("接收到客户端数据：",data.decode('utf-8'))
